import request from './request.js';
import config from './config.js';
import { useUserStore } from '@/stores/user';

const requestService = new request();

requestService.setConfig({
  baseUrl: config.BASE_URL,
  showLoading: true, // 是否显示请求中的loading
  loadingText: '努力加载中...', // 请求loading中的文字提示
  // 如果将此值设置为true，拦截回调中将会返回服务端返回的所有数据response，而不是response.data
  // 设置为true后，就需要在this.$u.http.interceptor.response进行多一次的判断，请打印查看具体值
  originalData: false,
  // 设置自定义头部content-type
  header: {
    'content-type': 'application/json',
  },
});

requestService.interceptor.request = (config) => {
  const userStore = useUserStore();
  const token = userStore.token;
  if (!config.header.Authorization && token) {
    config.header.Authorization = `Bearer ${token}`;
  }
  return config;
};

requestService.interceptor.response = async (res) => {
  const userStore = useUserStore();
  // 如果把originalData设置为了true，这里得到将会是服务器返回的所有的原始数据
  if (res.code === 200) {
    return res?.data || res?.rows;
  } else if (res.code == 401) {
    userStore.logout(true);
    throw Promise.reject(new Error('未登录'));
  } else if(res.code == 410){
    userStore.handleMembershipExpired();
    throw Promise.reject(new Error('会员已过期'));
  }
  else {
    const message = res.msg || '服务器错误';
    uni.showToast({
      title: message,
      icon: 'none',
    });
    throw Promise.reject(new Error(message));
  }
};

export default requestService;
